package com.rj.bd.kj.utils;

import javax.crypto.BadPaddingException;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import java.io.IOException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.SignatureException;
import java.util.concurrent.Callable;

/**
 * @desc   异常工具类
 * @author 靳吉瑞
 */

public class MyExceptionUtils  extends Exception{

    MyExceptionUtils(String message){
        super(message);
        }


    /**
     * 处理 NoSuchPaddingException 异常
     * @param e 异常对象
     */
    public static void handleNoSuchPaddingException(NoSuchPaddingException e) {
        System.out.println("Java 运行时环境无法找到或不支持在创建 Cipher 实例时指定的加密填充（Padding）机制.....");
        e.printStackTrace();
    }

    /**
     * 处理 NoSuchAlgorithmException 异常
     * @param e 异常对象
     */
    public static void handleNoSuchAlgorithmException(NoSuchAlgorithmException e) {
        System.out.println("请求的加密算法在当前环境中不可用或不支持.....");
        e.printStackTrace();
    }

    /**
     * 处理 InvalidKeyException 异常
     * @param e 异常对象
     */
    public static void handleInvalidKeyException(InvalidKeyException e) {
        System.out.println("加密、解密、签名或验证过程中使用了无效的密钥.....");
        e.printStackTrace();
    }

    /**
     * 处理 IllegalBlockSizeException 异常
     * @param e 异常对象
     */
    public static void handleIllegalBlockSizeException(IllegalBlockSizeException e) {
        System.out.println("非法的块大小或者数据块的长度不符合加密算法要求.........");
        e.printStackTrace();
    }

    /**
     * 处理 IllegalBlockSizeException 异常
     * @param e 异常对象
     */
    public static void handleArithmeticException(ArithmeticException e) {
        System.out.println("算术异常......");
        e.printStackTrace();
    }

    /**
     * 处理 IOException 异常
     * @param e
     */
    public static void handleIOException(IOException e) {
        System.out.println("IO输入输出异常......");
        e.printStackTrace();
    }

    /**
     *  处理 SignatureException 异常
     * @param e
     */
    public static void  handleSignatureException(SignatureException e){
        System.out.println("数字签名异常......");
        e.printStackTrace();
    }

    public static void handlerExceptions(Exception e) {

        if (e instanceof NoSuchPaddingException) {
            handleNoSuchPaddingException((NoSuchPaddingException) e);
        } else if (e instanceof NoSuchAlgorithmException) {
            handleNoSuchAlgorithmException((NoSuchAlgorithmException) e);
        } else if (e instanceof InvalidKeyException) {
            handleInvalidKeyException((InvalidKeyException) e);
        } else if (e instanceof IllegalBlockSizeException) {
            handleIllegalBlockSizeException((IllegalBlockSizeException) e);
        }  else if (e instanceof ArithmeticException) {
            handleArithmeticException((ArithmeticException) e);
        }  else if (e instanceof IOException) {
            handleIOException((IOException) e);
        } else if (e instanceof SignatureException) {
            handleSignatureException((SignatureException) e);
        }
        else {
            System.out.println("未知错误：" + e.getMessage());
            e.printStackTrace();

        }
    }
}


